package v1

import (
	"gf-vben-admin/internal/model/system"
	"gf-vben-admin/internal/model/system/entity"
	"github.com/gogf/gf/v2/frame/g"
)

//RolePageListReq 分页查询角色表Req
type RolePageListReq struct {
	g.Meta `path:"/pageList" tags:"Role" method:"post" summary:"分页查询角色表"`
	system.Role
}

//RolePageListRes 分页查询角色表Res
type RolePageListRes struct {
	Total int            `json:"total" dc:"行数"`
	Rows  []*entity.Role `json:"rows" dc:"角色表数组"`
}

//RoleListReq 列表查询角色表Req
type RoleListReq struct {
	g.Meta `path:"/list" tags:"Role" method:"post" summary:"列表查询角色表"`
	entity.Role
}

//RoleListRes 列表查询Res
type RoleListRes struct {
	Rows []*entity.Role `json:"rows" dc:"角色表数组"`
}

// RoleGetReq 查询角色表详情Req
type RoleGetReq struct {
	g.Meta `path:"/:id" tags:"Role" method:"get" summary:"列表查询角色表"`
	Id     int64 `json:"id" dc:""`
}

// RoleGetRes 查询角色表详情Res
type RoleGetRes struct {
	*entity.Role
}

//RoleAddReq 添加角色表Req
type RoleAddReq struct {
	g.Meta                   `path:"/" tags:"Role" method:"post" summary:"添加角色表"`
	Name                     string `json:"name" v:"required#角色名不能为空"  dc:"角色名"`
	Code                     string `json:"code" v:"required#角色编码不能为空"  dc:"角色编码"`
	Description              string `json:"description"   dc:"角色描述full description"`
	FdLevel                  string `json:"fdLevel" v:"required#角色级别不能为空"  dc:"角色级别"`
	TenantCode               string `json:"tenantCode" v:"required#租户编码不能为空"  dc:"租户编码"`
	InheritRoleId            int64  `json:"inheritRoleId"   dc:"继承角色ID"`
	ParentRoleId             int64  `json:"parentRoleId"   dc:"父级角色ID"`
	ParentRoleAssignLevel    string `json:"parentRoleAssignLevel"   dc:"父级角色分配层级"`
	ParentRoleAssignLevelVal int64  `json:"parentRoleAssignLevelVal"   dc:"父级角色分配值"`
	IsModified               int8   `json:"isModified" v:"required#是否可以修改。1表示可以，0不可以不能为空"  dc:"是否可以修改。1表示可以，0不可以"`
	IsEnableForbidden        int8   `json:"isEnableForbidden" v:"required#是否可以被禁用不能为空"  dc:"是否可以被禁用"`
	IsBuiltIn                int8   `json:"isBuiltIn" v:"required#是否内置。1表示是，0表示不是不能为空"  dc:"是否内置。1表示是，0表示不是"`
	IsAssignable             int8   `json:"isAssignable" v:"required#是否禁止在更高的层次上分配，禁止project role在organization上分配。1表示可以，0表示不可以不能为空"  dc:"是否禁止在更高的层次上分配，禁止project role在organization上分配。1表示可以，0表示不可以"`
	LevelPath                string `json:"levelPath"   dc:"角色层次关系"`
	InheritLevelPath         string `json:"inheritLevelPath"   dc:"角色继承生成层次关系"`
	CreatedByTenantId        int64  `json:"createdByTenantId"   dc:"创建者租户ID"`
	TplRoleName              string `json:"tplRoleName" v:"required#模板角色的子角色名称不能为空"  dc:"模板角色的子角色名称"`
	RoleHierarchy            int8   `json:"roleHierarchy" v:"required#角色体系，0-多级版(默认) 1-单级版不能为空"  dc:"角色体系，0-多级版(默认) 1-单级版"`
	EnableRolePermission     int8   `json:"enableRolePermission" v:"required#角色是否能操作数据权限等功能不能为空"  dc:"角色是否能操作数据权限等功能"`
	RoleTypeCode             string `json:"roleTypeCode" v:"required#角色类型：GEN-普通角色，SG-安全组角色不能为空"  dc:"角色类型：GEN-普通角色，SG-安全组角色"`
	State                    int8   `json:"state" v:"required#状态（1正常 0停用）不能为空"  dc:"状态（1正常 0停用）"`
}

//RoleAddRes 添加角色表Req
type RoleAddRes struct {
	Msg string `json:"msg" dc:"添加提示"`
}

//RoleEditReq 编辑角色表Req
type RoleEditReq struct {
	g.Meta                   `path:"/" tags:"Role" method:"put" summary:"编辑角色表"`
	Id                       int64  `json:"id" v:"required#不能为空"  dc:""`                 //主键
	VersionNumber            string `json:"versionNumber" v:"required#未识别到版本号" dc:"版本号"` //版本号
	Name                     string `json:"name" v:"required#角色名不能为空"  dc:"角色名"`
	Code                     string `json:"code" v:"required#角色编码不能为空"  dc:"角色编码"`
	Description              string `json:"description"   dc:"角色描述full description"`
	FdLevel                  string `json:"fdLevel" v:"required#角色级别不能为空"  dc:"角色级别"`
	TenantCode               string `json:"tenantCode" v:"required#租户编码不能为空"  dc:"租户编码"`
	InheritRoleId            int64  `json:"inheritRoleId"   dc:"继承角色ID"`
	ParentRoleId             int64  `json:"parentRoleId"   dc:"父级角色ID"`
	ParentRoleAssignLevel    string `json:"parentRoleAssignLevel"   dc:"父级角色分配层级"`
	ParentRoleAssignLevelVal int64  `json:"parentRoleAssignLevelVal"   dc:"父级角色分配值"`
	IsModified               int8   `json:"isModified" v:"required#是否可以修改。1表示可以，0不可以不能为空"  dc:"是否可以修改。1表示可以，0不可以"`
	IsEnableForbidden        int8   `json:"isEnableForbidden" v:"required#是否可以被禁用不能为空"  dc:"是否可以被禁用"`
	IsBuiltIn                int8   `json:"isBuiltIn" v:"required#是否内置。1表示是，0表示不是不能为空"  dc:"是否内置。1表示是，0表示不是"`
	IsAssignable             int8   `json:"isAssignable" v:"required#是否禁止在更高的层次上分配，禁止project role在organization上分配。1表示可以，0表示不可以不能为空"  dc:"是否禁止在更高的层次上分配，禁止project role在organization上分配。1表示可以，0表示不可以"`
	LevelPath                string `json:"levelPath"   dc:"角色层次关系"`
	InheritLevelPath         string `json:"inheritLevelPath"   dc:"角色继承生成层次关系"`
	CreatedByTenantId        int64  `json:"createdByTenantId"   dc:"创建者租户ID"`
	TplRoleName              string `json:"tplRoleName" v:"required#模板角色的子角色名称不能为空"  dc:"模板角色的子角色名称"`
	RoleHierarchy            int8   `json:"roleHierarchy" v:"required#角色体系，0-多级版(默认) 1-单级版不能为空"  dc:"角色体系，0-多级版(默认) 1-单级版"`
	EnableRolePermission     int8   `json:"enableRolePermission" v:"required#角色是否能操作数据权限等功能不能为空"  dc:"角色是否能操作数据权限等功能"`
	RoleTypeCode             string `json:"roleTypeCode" v:"required#角色类型：GEN-普通角色，SG-安全组角色不能为空"  dc:"角色类型：GEN-普通角色，SG-安全组角色"`
	State                    int8   `json:"state" v:"required#状态（1正常 0停用）不能为空"  dc:"状态（1正常 0停用）"`
}

//RoleEditRes 编辑角色表Res
type RoleEditRes struct {
	Msg string `json:"msg" dc:"编辑提示"`
}

//RoleEditStateReq 编辑角色表状态Req
type RoleEditStateReq struct {
	g.Meta `path:"/state" tags:"Role" method:"put" summary:"批量编辑角色表状态"`
	Ids    []int64 `json:"ids" v:"required#字典主键不能为空"  dc:"id集合"`   //主键
	State  int8    `json:"state" v:"required#字典状态不能为空"  dc:"字典状态"` //状态
}

//RoleDelReq 删除角色表Req
type RoleDelReq struct {
	g.Meta `path:"/" tags:"Role" method:"delete" summary:"删除角色表"`
	Ids    []int64 `json:"ids" v:"required#请选择需要删除的数据" dc:"id集合"`
}

//RoleDelRes 删除角色表Res
type RoleDelRes struct {
	Msg string `json:"msg" dc:"删除提示"`
}

//RoleScopeReq 删除角色表Req
type RoleScopeReq struct {
	g.Meta `path:"/scope" tags:"Role" method:"delete" summary:"删除角色表"`
	system.RoleScope
}

//RoleScopeRes 删除角色表Res
type RoleScopeRes struct {
	Msg string `json:"msg" dc:"删除提示"`
}
